package com.taotao.content.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.taotao.common.pojo.EasyUITreeNode;
import com.taotao.common.pojo.TaotaoResult;
import com.taotao.content.service.ContentCategoryService;
import com.taotao.mapper.TbContentCategoryMapper;
import com.taotao.pojo.TbContentCategory;
import com.taotao.pojo.TbContentCategoryExample;
import com.taotao.pojo.TbContentCategoryExample.Criteria;

@Service
public class ContentCategoryServiceImpl implements ContentCategoryService {

	@Autowired
	private TbContentCategoryMapper contentCategoryMapper;

	// 内容分类目录
	@Override
	public List<EasyUITreeNode> getContentCategoryList(Long parentId) {
		// 根据父节点id查询子节点列表
		// 创建条件对象
		TbContentCategoryExample example = new TbContentCategoryExample();
		// 创建条件
		Criteria criteria = example.createCriteria();
		criteria.andParentIdEqualTo(parentId);
		// 执行查询
		List<TbContentCategory> contentCategoryList = contentCategoryMapper.selectByExample(example);
		// 创建EasyUITreeNode集合对象
		List<EasyUITreeNode> list = new ArrayList<>();
		// 遍历contentCategoryList集合 将数据封装到 list中
		for (TbContentCategory tbContentCategory : contentCategoryList) {
			// 创建EasyUITreeNode对象
			EasyUITreeNode easyUITreeNode = new EasyUITreeNode();
			easyUITreeNode.setId(tbContentCategory.getId());
			easyUITreeNode.setText(tbContentCategory.getName());
			// 判断是否为父节点
			easyUITreeNode.setState(tbContentCategory.getIsParent() ? "closed" : "open");

			// easyUITreeNode添加到list中
			list.add(easyUITreeNode);
		}
		// 返回list
		return list;
	}

	// 增加分类
	@Override
	public TaotaoResult insertContentCategory(Long parentId, String name) {
		// 封装数据
		TbContentCategory contentCategory = new TbContentCategory();
		// 设置name
		contentCategory.setName(name);
		// 设置父节点id
		contentCategory.setParentId(parentId);
		// 设置时间
		Date date = new Date();
		contentCategory.setCreated(date);
		contentCategory.setUpdated(date);
		// 1为正常 2为删除
		contentCategory.setStatus(1);
		// 不是父节点 是叶子节点
		contentCategory.setIsParent(false);
		// 排序
		contentCategory.setSortOrder(1);
		// 插入新增分类 同时在执行插入语句后返回该新增分类的id封装到pojo类中
		contentCategoryMapper.insert(contentCategory);

		// 根据父节点id查询父节点
		TbContentCategory category = contentCategoryMapper.selectByPrimaryKey(parentId);
		// 更新父节点状态
		// 判断是否为父节点
		if (!category.getIsParent()) {
			// 设置为父节点
			category.setIsParent(true);
			// 更新数据库
			contentCategoryMapper.updateByPrimaryKey(category);
		}
		// 返回数据 包含新增的分类
		return TaotaoResult.ok(contentCategory);
	}

	// 更新分类名称
	@Override
	public void updateContentCategory(Long id, String name) {
		// 根据id查询当前分类
		TbContentCategory contentCategory = contentCategoryMapper.selectByPrimaryKey(id);
		// 设置名字
		contentCategory.setName(name);
		// 更新
		contentCategoryMapper.updateByPrimaryKey(contentCategory);
	}

	// 删除分类
	@Override
	public void deleteContentCategory(Long id) {

		// 根据id查询节点
		// TbContentCategory contentCategory =
		// contentCategoryMapper.selectByPrimaryKey(id);
		TbContentCategoryExample example = new TbContentCategoryExample();
		Criteria criteria = example.createCriteria();
		criteria.andParentIdEqualTo(id);
		// 查询该id下的所有子节点
		List<TbContentCategory> list = contentCategoryMapper.selectByExample(example);
		// 遍历
		for (TbContentCategory tbContentCategory : list) {
			// 判断是否为父节点
			if (!tbContentCategory.getIsParent()) {
				// 不是直接删除
				contentCategoryMapper.deleteByPrimaryKey(tbContentCategory.getId());
			} else {
				deleteContentCategory(tbContentCategory.getId());
			}
		}

		// 删除自己
		contentCategoryMapper.deleteByPrimaryKey(id);
	}
}
